package com.xrh.xdemo.service.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;


//生成随机省份证号
public class CreateIDCardUtils {

	// 18位身份证号码各位的含义:
	// 1-2位省、自治区、直辖市代码；
	// 3-4位地级市、盟、自治州代码；
	// 5-6位县、县级市、区代码；
	// 7-14位出生年月日，比如19670401代表1967年4月1日；
	// 15-17位为顺序号，其中17位（倒数第二位）男为单数，女为双数；
	// 18位为校验码，0-9和X。
	// 作为尾号的校验码，是由把前十七位数字带入统一的公式计算出来的，
	// 计算的结果是0-10，如果某人的尾号是0－9，都不会出现X，但如果尾号是10，那么就得用X来代替，
	// 因为如果用10做尾号，那么此人的身份证就变成了19位。X是罗马数字的10，用X来代替10
	public static IdCardInfo randomIdCard() {
		
		String id = "420222199204179999";
		
		// 随机生成省、自治区、直辖市代码 1-2
		String provinces[] = { "11", "12", "13", "14", "15", "21", "22", "23",
				"31", "32", "33", "34", "35", "36", "37", "41", "42", "43",
				"44", "45", "46", "50", "51", "52", "53", "54", "61", "62",
				"63", "64", "65", "71", "81", "82" };
		String province = randomOne(provinces);
		
		// 随机生成地级市、盟、自治州代码 3-4
		String city = randomCityCode(18);
		
		// 随机生成县、县级市、区代码 5-6
		String county = randomCityCode(28);
		
		// 随机生成出生年月 7-14
		Date birthDate = randomBirth(20, 50);
		
		SimpleDateFormat dft = new SimpleDateFormat("yyyyMMdd");// 设置日期格式
		
		// 随机生成顺序号 15-17(随机性别)
		String no = new Random().nextInt(899) + 100+"";  
		
		// 随机生成校验码 18
		String checks[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
				"X" };
		String check = randomOne(checks);
		
		// 拼接身份证号码
		id = province + city + county + dft.format(birthDate) + no + check;
		
		return new IdCardInfo(birthDate, id);
	}

	/**
	 * 从String[] 数组中随机取出其中一个String字符串
	 * 
	 * @author mingzijian
	 * @param s
	 * @return
	 */
	public static String randomOne(String s[]) {
		return s[new Random().nextInt(s.length - 1)];
	}

	/**
	 * 随机生成两位数的字符串（01-max）,不足两位的前面补0
	 * 
	 * @author mingzijian
	 * @param max
	 * @return
	 */
	public static String randomCityCode(int max) {
		int i = new Random().nextInt(max) + 1;
		return i > 9 ? i + "" : "0" + i;
	}
	
	/**
	 * 随机生成minAge到maxAge年龄段的人的生日日期
	 * 
	 * @author mingzijian
	 * @param minAge
	 * @param maxAge
	 * @return
	 */
	public static Date randomBirth(int minAge, int maxAge) {
		Calendar date = Calendar.getInstance();
		date.setTime(new Date());// 设置当前日期
		// 随机设置日期为前maxAge年到前minAge年的任意一天
		int randomDay = 365 * minAge+ new Random().nextInt(365 * (maxAge - minAge));
		date.set(Calendar.DATE, date.get(Calendar.DATE) - randomDay);
		return date.getTime();
	}
	
	 static  class IdCardInfo{
		private Date birthDate;
		private String idCard;
		
		public IdCardInfo() {
			super();
			// TODO Auto-generated constructor stub
		}
		public IdCardInfo(Date birthDate, String idCard) {
			super();
			this.birthDate = birthDate;
			this.idCard = idCard;
		}
		public Date getBirthDate() {
			return birthDate;
		}
		public void setBirthDate(Date birthDate) {
			this.birthDate = birthDate;
		}
		public String getIdCard() {
			return idCard;
		}
		public void setIdCard(String idCard) {
			this.idCard = idCard;
		}
		
		
	}

}